import development from '/config/development'
import production from '/config/productions'
const host = process.env.NODE_ENV === 'development' ? development.host : production.host;
const install = Vue => {
	// 初始化请求配置
	uni.$u.http.setConfig((config) => {
		/* config 为默认全局配置*/
		config.baseURL = host; /* 根域名 */
		return config
	})

	// 请求拦截
	uni.$u.http.interceptors.request.use((config) => { // 可使用async await 做异步操作
		// 初始化请求拦截器时，会执行此方法，此时data为undefined，赋予默认{}
		config.data = config.data || {}
		// 根据custom参数中配置的是否需要token，添加对应的请求头
		// if(config?.custom?.auth) {
		// 	// 可以在此通过vm引用vuex中的变量，具体值在vm.$store.state中
		// 	config.header['user-token']= vm.$store.state.user.token
		// }
		if (config.custom.loading) {
			uni.showLoading()
		}
		config.header['user-token'] = uni.getStorageSync('token')
		config.header.platform = 'app'
		return config
	}, config => { // 可使用async await 做异步操作
		return Promise.reject(config)
	})

	// 响应拦截
	uni.$u.http.interceptors.response.use((response) => {
		/* 对响应成功做点什么 可使用async await 做异步操作*/
		const data = response.data
		uni.hideLoading()
		// 自定义参数
		const custom = response.config?.custom
		if (data.code !== 200) {
			// code码为以下几种情况时 需要重新登录
			/* 
			 50001:非法token
			 50002:token失效
			 50009:请先登录
			 500010:当前操作需要登录
			 500011:当前操作需要登录
			 */
			if (data.code == 50001 || data.code == 50002 || data.code == 50009 || data.code == 50010 || data
				.code == 50011) {
				let utype = uni.getStorageSync('utype')
				uni.clearStorageSync()
				uni.setStorageSync('utype', utype)
				uni.$u.route({
					type: 'reLaunch',
					url: 'pages/login/login'
				})
				return
				// code码为以下几种情况时需要更新缓存中的next_code
				/* 
				 50003:请先填写企业资料
				 50004:企业未认证，强制认证
				 50005:请先完善简历
				 50007:请先注册简历（引导到简历注册页）
				 */
			} else if (data.code == 50004 || data.code == 50003 || data.code == 50007 || data.code ==
				50005) {
				uni.setStorageSync('next_code', data.code)
				if (data.code == 50003) {
					uni.$u.route('/pages/pagesPersonal/companyInfo/initCompanyInfo')
				}
				if (data.code == 50005) {
					uni.$u.route({
						type: 'reLaunch',
						url: '/pages/pagesPersonal/myResume/myResume'
					})
				}
				if (data.code == 50004) {
					return Promise.reject(data)
				}
				if (data.code == 50007) {
					uni.$u.route({
						type: 'reLaunch',
						url: '/pages/pagesPersonal/Initial/Initial'
					})
				}
			} else {
				// 如果没有显式定义custom的toast参数为false的话，默认对报错进行toast弹出提示
				if (custom.toast !== false) {
					uni.$u.toast(data.message)
				}

				// 如果需要catch返回，则进行reject
				if (custom?.catch) {
					return Promise.reject(data)
				} else {
					// 否则返回一个pending中的promise，请求不会进入catch中
					return new Promise(() => {})
				}
			}
		}
		if (data.code == 200 && data.data.next && data.data.next != '') {
			return Promise.reject(data)
		} else {
			return data.data === undefined ? {} : data.data
		}
	}, (response) => {
		// 对响应错误做点什么 （statusCode !== 200）
		return Promise.reject(response)
	})
}

export default {
	install
}